package com.lyx.server.util;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.lyx.common.type.LevelType;
import com.lyx.server.dao.SignLogDao;
import com.lyx.server.dao.UserDao;
import com.lyx.server.dao.UserLogDao;
import com.lyx.server.entity.SignLog;
import com.lyx.server.entity.User;
import com.lyx.server.entity.UserLog;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

/**
 * --- Be Humble and Hungry ---
 *
 * @author McMeloxD
 * @date 2024/8/15
 * @desc 签到 只更新登陆天数  其他都用工具类 接受id  积分  原因  更新积分  判断等级   等级  记录日志
 */
@Component
@RequiredArgsConstructor
public class ExpUtil {
    private final UserDao dao;
    private final SignLogDao signdao;
    private final UserLogDao userlogdao;

    public boolean addExp(int uid, Integer exp, String info,String type) {
        // 先加积分
        int i = dao.updateExpByUid(exp, uid);
        // 记录积分日志
        signdao.insert(new SignLog(uid, exp, info,type));
        if (i > 0) {
            User user = dao.selectOne(new LambdaQueryWrapper<User>().eq(User::getId, uid));
            // 再判断是否达到升级条件
            if (user.getExp() > 10000) {
                // 升级
                dao.updateLevelByUid(uid, LevelType.终极代理商.getVal());
                // 记录用户日志
                userlogdao.insert(new UserLog(uid, "升级", "升级成功", "升级为四级代理商"));
                return true;
            } else if (user.getExp() >= 1000) {
                // 升级
                dao.updateLevelByUid(uid, LevelType.高级代理商.getVal());
                // 记录用户日志
                userlogdao.insert(new UserLog(uid, "升级", "升级成功", "升级为三级代理商"));
                return true;
            } else if (user.getExp() >= 100) {
                dao.updateLevelByUid(uid, LevelType.中级代理商.getVal());
                // 记录用户日志
                userlogdao.insert(new UserLog(uid, "升级", "升级成功", "升级为二代理商"));
                return true;
            } else {
                // 没达到条件继续
                return true;
            }
        } else return false;
    }

}
